import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret=new ArrayList<>();
        List<Integer> list0=new ArrayList<>();
        //1.先把杨辉三角的第一行处理好
        list0.add(1);
        ret.add(list0);
        for(int i=1;i<numRows;i++){
            //1.杨辉三角每行的首项都是1
            List<Integer> curRow=new ArrayList<>();
            curRow.add(1);
            //2.处理中间项
            //获取当前行的上一行
            List<Integer> preRow=ret.get(i-1);
            for(int j=1;j<i;j++){
                int x=preRow.get(j)+preRow.get(j-1);
                curRow.add(x);
            }
            //3.杨辉三角每行的末项都是1
            curRow.add(1);
            ret.add(curRow);
        }
        return ret;
    }
    public static void main(String[] args) {
        Test test=new Test();
        Scanner scanner=new Scanner(System.in);
        int a=scanner.nextInt();
        List<List<Integer>> flg=test.generate(a);
        for(List<Integer> row:flg){
            for(Integer num:row){
                System.out.print(num+" ");
            }
            System.out.println();
        }
    }
}
